package com.sauron.starter.proxy.dynamicDemo;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 自定义的proxy实现invocationHandler,生成最终工厂代理,工厂代理完成最后交付，到方法维度
 *
 * proxy --代理对象
 * InvocationHandler --标准代购流程
 *
 */

// 代理对象
public class DynamicProxy implements InvocationHandler {

    private Object target;

    public Object getTarget() {
        return target;
    }

    public void setTarget(Object target) {
        this.target = target;
    }

    // 通过反射生成最终的代理对象
    public Object getProxy(){
        return Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        before();
        Object invoke = method.invoke(target, args);
        System.out.println(invoke);
        after();
        return null;
    }

    private void after() {

        System.out.println("before");
    }

    private void before() {
        System.out.println("after");
    }


}
